<?php

/**
 * Información acerca de la api de troovel.
 * */
abstract class Troovel {
	/**
	 * API key para troovel webservice.
	 * @const
	 * @var string
	 * */
	const API_KEY = "71cd4cd583942f485af72f6d88c15e3e137bf5da";
	
	/**
	 * Troovel URL base.
	 * @const
	 * @var string
	 * */
	const URL = 'beta.troovel.com/services/api/rest';
	
	/**
	 * Formato de la llamada a la API webservice.
	 * */
	const URL_FORMAT = 'json';
	
	const RES_STATUS = "status";
	const RES_RESULT = "result";
	/**
	 * Código sin error.
	 * */
	const NO_ERROR = 0;
	
	/**
	 * Indica un error de base, falta de parametros, fallo de autenticación de API,
	 * fallo de autenticación de usuario para las llamadas que lo requieran,
	 * fallo en el nombre del servicio llamado, etc.
	 * */
	const ERROR_GENERAL = -1;
	
	/**
	 * Conjunto de métodos disponibles.
	 * @static
	 * */
	private static $METHOD = array(
		'user' => array('login' => 'user.login', 'register' => 'user.register'),
		'search' => array('related' => 'search.related')
	);
	
	/**
	 * Contiene la url base bien formada y preparada para ser usada.
	 * Se debe utilizar sólo después de haber ejecutado Troovel::init();
	 * */
	public static $URL_BASE;
	
	/**
	 * Inicializa datos internos de la clase.
	 * */
	public static function init (){
		self::$URL_BASE = 'htpp://' . self::URL . '/' . self::URL_FORMAT . '/?api_key=' . self::API_KEY . '&method=';
	}
	
	
	/**
	 * Llamada user.login
	 * @param string email Email del usuario
	 * @param string password
	 * @return
	 * */
	public static function login($email, $password){
		$passParam = "&password=".$password;
		$emailParam = "&email=".$email;
		
		$handler = curl_init(self::$URL_BASE . self::$METHOD['user']['login'] . $emailParam . $passParam);
		$result = curl_exec($handler);
		curl_close($handler);
		
		$result = json_decode($result);
		if($result[self::RES_STATUS] == self::NO_ERROR){
			return $result[self::RES_RESULT];
		} else {
			switch($result[self::RES_STATUS]){
				case self::ERROR_GENERAL:
				default:
					return null;
			}
		}
		
	}
	
	/**
	 * Llamada search.related
	 * @param integer $idplace Identificador del lugar
	 * */
	public static function searchPlace($idPlace){
		$placeIdParam = "&place_id=".$idPlace;
		
		$handler = curl_init(self::$URL_BASE . self::$METHOD['search']['related'] . $placeIdParam);
		$result = curl_exec($handler);
		curl_close($handler);
		
		$result = json_decode($result);
		if($result[self::RES_STATUS] == self::NO_ERROR){
			return true;
		} else {
			return false;
		}
	}
}

Troovel::init();

?>